package core

type GenericCommonResponse[T any] struct {
	Code int    `json:"code" default:"200"` // 业务Code
	Msg  string `json:"msg"`                // 消息
	Data T      `json:"data"`               // 数据
}

type ErrDetail struct {
	Detail string `json:"detail"` // 错误详细信息
}

type IdReq struct {
	Id string `json:"id" form:"id" uri:"id"` // ID
}

type IdPathReq struct {
	Id string `json:"id" form:"id" uri:"id"` // ID
}

type IdsReq struct {
	Ids []string `json:"ids"` // ID 列表
}

type EmptyReq struct {
}

type EmptyResp struct {
}

type MapReq map[string]interface{}

type SearchReq struct {
	Search string `json:"search" form:"search"` // 搜索字符串
}

type PageReq struct {
	Page     int64 `json:"page" form:"page"`         // 页码
	PageSize int64 `json:"pageSize" form:"pageSize"` // 页长
}

type PageResp struct {
	Total    int64 `json:"total"`    // 记录总数
	Page     int64 `json:"page"`     // 页码
	PageSize int64 `json:"pageSize"` // 页长
}

type GenericModelList[T any] struct {
	List []T `json:"list"`
}

// api

type Response struct {
	Code int         `json:"code" default:"0"`
	Msg  string      `json:"msg"`
	Data interface{} `json:"data"`
}

type GenericResponse[T any] struct {
	Code int    `json:"code" default:"0"`
	Msg  string `json:"msg"`
	Data T      `json:"data"`
}

func NewResponse(code int, msg string, data interface{}) GenericResponse[interface{}] {
	return GenericResponse[interface{}]{Code: code, Msg: msg, Data: data}
}

func SuccessResp(msg string, data interface{}) GenericResponse[interface{}] {
	if msg == "" {
		msg = "请求成功"
	}
	if data == nil {
		data = map[string]interface{}{}
	}
	return NewResponse(0, msg, data)
}

func ErrResp(msg string, err error) GenericResponse[interface{}] {
	if msg == "" {
		msg = "请求失败"
	}
	data := map[string]interface{}{
		"detail": err.Error(),
	}
	return NewResponse(400, msg, data)
}
